
# 可变参数
"""
1. 概念 ：通过定义定义为可变参数时，传入的参数数量是可变化的 。
2. 分类 ： 列表形式的可变参数 ，字典形式的可变参数
3. 列表形式的可变参数 ：
    (1). 定义 ： 在参数前面加一个* ，传值进来的时候就变为了一个元组 。
    (2). 传值 ：可以以位置参数参数传递，也可以以列表形式或元组形式参数 ，前面加*

4. 字典形式的可变参数
    (1). 定义 ：在参数名前加两个** ，传值的时候进来就变为了一个字典 。
    (2). 传值 ： 可以是以关键字形式传递 ，也可以以字典形式传值 ，字典前必须加** 。
"""


# 需求 ：加法的操作 ，用户可以随便传任意个值
def add(x,y,*args):
    print("args:",args)
    return x + y + sum(args)


print(add(2,5))
print(add(2,5,3,4,5,6,7))       # 以位置参数传递

# 以列表或元组形式传递
print(add(3,4,*[2,3,4,5,6]))
print(add(3,4,*(2,3,4,5,6)))

print("="*60)
def add1(a,b,**kwargs):
    print("kwargs:",kwargs)
    z = a + b
    for x in kwargs.values():
        z += x
    return z


print(add1(2,1))
print(add1(2,1,x=1,y=2))        # 以关键字形式传递
print(add1(2,1,**{'c':1,'d':6,'x':8}))


def add2(*args,**kwargs):
    pass